#pragma once


#include "esp_system.h"
#include "string.h"
// #include "gpio_num.h"

// AD7997/AD7998地址配置 (根据AS引脚连接)
#define AD799X_ADDR_AS_GND          0x21
#define AD799X_ADDR_AS_VDD          0x22
// #define AD799X_ADDR_AS_VDD          0x24
#define AD799X_ADDR_AS_FLOAT        0x20

// 初始化AD799X设备
esp_err_t ad799x_init(uint8_t dev_addr);
// 设置要转换的通道
esp_err_t ad799x_set_channel(uint8_t dev_addr, uint16_t channel_mask);
// 启用/禁用滤波器
esp_err_t ad799x_set_filter(uint8_t dev_addr, bool enable);
// 配置ALERT/BUSY引脚
esp_err_t ad799x_config_alert_pin(uint8_t dev_addr, bool alert_enable, bool busy_mode, bool active_high);
// 模式1: 使用CONVST引脚触发转换
// 注意: 需要外部连接CONVST引脚到GPIO并配置为输出
// esp_err_t ad799x_mode1_trigger_conversion(uint8_t dev_addr, gpio_num_t convst_pin);
// 模式2: 命令模式触发转换
esp_err_t ad799x_mode2_trigger_conversion(uint8_t dev_addr, uint8_t channel_cmd);
// 读取转换结果 (12位数据)
esp_err_t ad799x_read_conversion_result(uint8_t dev_addr, uint16_t *result, uint8_t *channel, bool *alert);
// 读取所有已启用通道的结果 (适用于序列模式)
esp_err_t ad799x_read_all_enabled_channels(uint8_t dev_addr, uint16_t results[8], bool *alert);
// 设置限值寄存器 (用于ALERT功能)
esp_err_t ad799x_set_limit_registers(uint8_t dev_addr, uint8_t channel, uint16_t high_limit, uint16_t low_limit, uint16_t hysteresis);
// 配置自动循环模式 (模式3)
esp_err_t ad799x_set_auto_cycle_mode(uint8_t dev_addr, uint8_t cycle_time);
// 读取ALERT状态寄存器
esp_err_t ad799x_read_alert_status(uint8_t dev_addr, uint8_t *status);
// 清除ALERT状态
esp_err_t ad799x_clear_alert_status(uint8_t dev_addr);